<?php

/*
*---------------------------------------------------------------
* APPLICATION ENVIRONMENT
*---------------------------------------------------------------
*
*
* //配置项目运行的环境，该配置会影响错误报告的显示和配置文件的读取。
*/
define('ENVIRONMENT', 'development');
/*
*---------------------------------------------------------------
* ERROR REPORTING
*---------------------------------------------------------------
*
*/

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'development':
            error_reporting(E_ALL);
            break;

        case 'testing':
        case 'production':
            error_reporting(0);
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}

/*
*---------------------------------------------------------------
* SYSTEM FOLDER NAME
*---------------------------------------------------------------
*
*
* 设置系统目录
*/
$system_path = 'system';

/*
*---------------------------------------------------------------
* APPLICATION FOLDER NAME
*---------------------------------------------------------------
*
*
* 设置应用目录
*/
$application_folder = 'application';

/*
* --------------------------------------------------------------------
* DEFAULT CONTROLLER
* --------------------------------------------------------------------
*
*
*/

//下面这个地方设置的$routing会对路由有重定向的作用。详见：core/CodeIginter.php
// $routing['directory'] = '';

// $routing['controller'] = '';

// $routing['function'] = '';

/*
* -------------------------------------------------------------------
* CUSTOM CONFIG VALUES
* ------------------------------------------------------------------
* 下面这里提供一个定义配置信息的地方。其实在index.php里面很多地方都可以设置一些配置，像刚才上面的$routing，

* 而在这里设置的配置信息要优先于在config/目录下设置的配置信息。
*/
// $assign_to_config['name_of_config_item'] = 'value of config item';

// --------------------------------------------------------------------
// END OF USER CONFIGURABLE SETTINGS. DO NOT EDIT BELOW THIS LINE
// --------------------------------------------------------------------

/*
* ---------------------------------------------------------------
* Resolve the system path for increased reliability
* ---------------------------------------------------------------
*/

//这个请参考：http://blog.163.com/wu_guoqing/blog/static/196537018201272512616394/
if (defined('STDIN'))
{
    chdir(dirname(__FILE__));
}

//计算出$system_path,即核心文件所在的路径。realpath($path)中的$path必须为存在的路径。
if (realpath($system_path) !== FALSE)
{
    $system_path = realpath($system_path).'/';
}

// 确保以/结尾
$system_path = rtrim($system_path, '/').'/';

// 判断是否为正确的目录
if ( ! is_dir($system_path))
{
    exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME));
}

/*
* -------------------------------------------------------------------
* 在上面配置好一些文件目录信息后，根据这些目录来定义好一些常量。
* -------------------------------------------------------------------
*/
// 这个入口文件的文件名，目前是index.php
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

// 文件扩展名
define('EXT', '.php');

// 统一以/为目录分隔符（windows下是/或\，linux下默认是/）
define('BASEPATH', str_replace("\\", "/", $system_path));

// 前端控制器所在的目录。在CI里面就是这个入口文件。
define('FCPATH', str_replace(SELF, '', __FILE__));

// 取得核心文件的目录名，具体做法如下：
//trim(BASHPATH,'/'):先把BASHPATH给修剪一下，去掉首尾的‘/’
//先后通过strrchr(xxx,'/')：把上述得出来的字符串，截取出以最后一个'/'开头到结尾的一个子字符串。
//最后再trim(xxx,'/')，去掉两端的‘/’，实质这里是去掉左边的'/'。
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));

// 定义应用文件目录

//先看看这个被你配置的目录是不是相对于当前文件，如果是的话，就可以成功定义。
if (is_dir($application_folder))
{
    define('APPPATH', $application_folder.'/');
}
else
{
//如果不是，则再判断相对于核心文件目录是否存在这个应用目录。如果没有就拉倒了。。
    if ( ! is_dir(BASEPATH.$application_folder.'/'))
    {
        exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
    }

    define('APPPATH', BASEPATH.$application_folder.'/');
}

/*
* --------------------------------------------------------------------
* LOAD THE BOOTSTRAP FILE
* --------------------------------------------------------------------
*
*/

//实质上，这个前端控制器兼入口文件仅仅是定义当前项目运行的环境和一些常量，而真正起宏观控制作用的是下面这个CodeIgniter.php。
require_once BASEPATH.'core/CodeIgniter.php';

/**
 * 总结一下这个文件做了一些什么：
 * 第一，先设置好当前项目的运行环境，这里主要是错误报告方面的设置，这个放在了整个项目运行的第一位。
 * 第二，再配置好一些目录信息，这些都是一定开发人员可以自定义的东西。然后根据配置目录信息，CI会把一些以后会有用的东西定义为常量
 * ，为什么要这样做呢？因为以后会在很多不同地方，例如CI里面的各个组件都会用到路径相关的信息，在这里统一计算并定义，以后方
 * 便引用和修改。
 * 第三，引入CodeIgniter.php进行工作。
 *
 * 移步至核心文件目录下的core/CodeIgniter.php： http://calixwu.com/2014/11/codeigniter-yuanmafenxi-codeigniter-php.html
 */